package com.castle.fortress.admin.contract.info.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.castle.fortress.admin.contract.info.entity.ContractEntity;
import com.castle.fortress.admin.contract.info.dto.ContractDto;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.Map;
import java.util.List;

/**
 * 合同信息表 服务类
 *
 * @author 
 * @since 2025-04-23
 */
public interface ContractService extends IService<ContractEntity> {

    /**
     * 分页展示合同信息表列表
     * @param page
     * @param contractDto
     * @return
     */
    IPage<ContractDto> pageContract(Page<ContractDto> page, ContractDto contractDto);

    /**
     * 使用自定义SQL分页查询合同信息
     * @param page
     * @param contractDto
     * @return
     */
    IPage<ContractDto> pageContractWithSql(Page<ContractDto> page, ContractDto contractDto);

    /**
     * 展示合同信息表列表
     * @param contractDto
     * @return
     */
    List<ContractDto> listContract(ContractDto contractDto);
    
    /**
     * 保存/更新合同信息和审核记录
     * 如果 contractDto.contractId 有值，则更新现有记录
     * 如果 contractDto.contractId 为空，则创建新记录
     * 
     * @param contractDto 合同信息
     * @param stance 审查立场(partyA:甲方立场 partyB:乙方立场 neutral:中立立场)
     * @param intensity 审查尺度(strong:强势 weak:弱势 equal:均势)
     * @param ruleListId 规则清单ID，多个用逗号分隔
     * @param reviewMethod 审查方式(ai:AI智能生成 knowledge:从知识库选择)
     * @return 保存/更新成功返回合同ID，失败返回null
     */
    Long saveContractAndReview(ContractDto contractDto, String stance, String intensity, String ruleListId, String reviewMethod);

    /**
     * 获取合同和审核记录的详情
     * 根据合同ID，获取合同信息及其关联的审核记录
     * 
     * @param contractId 合同ID
     * @return 包含合同信息和审核记录的DTO对象
     */
    ContractDto getContractAndReviewDetail(Long contractId);

    /**
     * 级联删除合同数据
     * 删除合同表数据的同时，级联删除与之关联的审核记录和规则关联数据
     * 
     * @param contractId 合同ID
     * @return 是否删除成功
     */
    boolean cascadeDeleteContract(Long contractId);
}
